{
  "info": {
    "_postman_id": "057be9f8-900e-47a4-90ae-dfcb5aad6179",
    "name": "Test Explore With Me - Comments",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
    "_exporter_id": "21557342"
  },
  "item": [
    {
      "name": "Add user1",
      "event": [
        {
          "listen": "prerequest",
          "script": {
            "exec": [
              ""
            ],
            "type": "text/javascript"
          }
        },
        {
          "listen": "test",
          "script": {
            "exec": [
              "pm.test(\"Ответ должен содержать код статуса 201 и данные в формате json\", function () {\r",
              "    pm.response.to.have.status(201); // проверяем код ответа\r",
              "    pm.response.to.be.withBody; // ответ должен содержать тело\r",
              "    pm.response.to.be.json; // и тело ответа должно быть в формате JSON\r",
              "});\r",
              "\r",
              "const source = JSON.parse(pm.request.body.raw);\r",
              "const target = pm.response.json(); // получаем тело ответа в формате JSON\r",
              "\r",
              "pm.test(\"Пользователь должен содержать поля: id, name, email\", function () {\r",
              "pm.expect(target).to.have.property('id'); // проверяем, что есть такое поле\r",
              "pm.expect(target).to.have.property('name'); // проверяем, что есть такое поле\r",
              "pm.expect(target).to.have.property('email'); // проверяем, что есть такое поле\r",
              "});\r",
              "\r",
              "pm.test(\"Данные в ответе должны соответствовать данным в запросе\", function () {\r",
              "    pm.expect(target.id).to.not.be.null;\r",
              "    pm.expect(source.name).equal(target.name, 'Имя пользователя должно соответствовать отправленному в запросе');\r",
              "    pm.expect(source.email).equal(target.email, 'Почта пользователя должна соответствовать отправленной в запросе');\r",
              "});"
            ],
            "type": "text/javascript"
          }
        }
      ],
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json",
            "type": "text"
          },
          {
            "key": "Accept",
            "value": "application/json",
            "type": "text"
          }
        ],
        "body": {
          "mode": "raw",
          "raw": "{\r\n    \"name\": \"User1\",\r\n    \"email\": \"user1@mail.ru\"\r\n}"
        },
        "url": {
          "raw": "http://localhost:8080/admin/users",
          "protocol": "http",
          "host": [
            "localhost"
          ],
          "port": "8080",
          "path": [
            "admin",
            "users"
          ]
        }
      },
      "response": []
    },
    {
      "name": "Add user2",
      "event": [
        {
          "listen": "prerequest",
          "script": {
            "exec": [
              ""
            ],
            "type": "text/javascript"
          }
        },
        {
          "listen": "test",
          "script": {
            "exec": [
              "pm.test(\"Ответ должен содержать код статуса 201 и данные в формате json\", function () {\r",
              "    pm.response.to.have.status(201); // проверяем код ответа\r",
              "    pm.response.to.be.withBody; // ответ должен содержать тело\r",
              "    pm.response.to.be.json; // и тело ответа должно быть в формате JSON\r",
              "});\r",
              "\r",
              "const source = JSON.parse(pm.request.body.raw);\r",
              "const target = pm.response.json(); // получаем тело ответа в формате JSON\r",
              "\r",
              "pm.test(\"Пользователь должен содержать поля: id, name, email\", function () {\r",
              "pm.expect(target).to.have.property('id'); // проверяем, что есть такое поле\r",
              "pm.expect(target).to.have.property('name'); // проверяем, что есть такое поле\r",
              "pm.expect(target).to.have.property('email'); // проверяем, что есть такое поле\r",
              "});\r",
              "\r",
              "pm.test(\"Данные в ответе должны соответствовать данным в запросе\", function () {\r",
              "    pm.expect(target.id).to.not.be.null;\r",
              "    pm.expect(source.name).equal(target.name, 'Имя пользователя должно соответствовать отправленному в запросе');\r",
              "    pm.expect(source.email).equal(target.email, 'Почта пользователя должна соответствовать отправленной в запросе');\r",
              "});"
            ],
            "type": "text/javascript"
          }
        }
      ],
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json",
            "type": "text"
          },
          {
            "key": "Accept",
            "value": "application/json",
            "type": "text"
          }
        ],
        "body": {
          "mode": "raw",
          "raw": "{\r\n    \"name\": \"User2\",\r\n    \"email\": \"user2@mail.ru\"\r\n}"
        },
        "url": {
          "raw": "http://localhost:8080/admin/users",
          "protocol": "http",
          "host": [
            "localhost"
          ],
          "port": "8080",
          "path": [
            "admin",
            "users"
          ]
        }
      },
      "response": []
    },
    {
      "name": "Add category1",
      "event": [
        {
          "listen": "test",
          "script": {
            "exec": [
              "pm.test(\"Ответ должен содержать код статуса 201 и данные в формате json\", function () {\r",
              "    pm.response.to.have.status(201);\r",
              "    pm.response.to.be.withBody;\r",
              "    pm.response.to.be.json;\r",
              "});\r",
              "\r",
              "const source = JSON.parse(pm.request.body.raw);\r",
              "const target = pm.response.json();\r",
              "\r",
              "pm.test(\"Категория должна содержать поля: id, name\", function () {\r",
              "pm.expect(target).to.have.property('id');\r",
              "pm.expect(target).to.have.property('name');\r",
              "});\r",
              "\r",
              "pm.test(\"Данные в ответе должны соответствовать данным в запросе\", function () {\r",
              "    pm.expect(target.id).to.not.be.null;\r",
              "    pm.expect(source.name).equal(target.name, 'Название категории должно совпадать с отправленным');\r",
              "});"
            ],
            "type": "text/javascript"
          }
        }
      ],
      "request": {
        "method": "POST",
        "header": [],
        "body": {
          "mode": "raw",
          "raw": "{\r\n    \"name\": \"TV show\"\r\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        },
        "url": {
          "raw": "http://localhost:8080/admin/categories",
          "protocol": "http",
          "host": [
            "localhost"
          ],
          "port": "8080",
          "path": [
            "admin",
            "categories"
          ]
        }
      },
      "response": []
    },
    {
      "name": "Add event1",
      "event": [
        {
          "listen": "test",
          "script": {
            "exec": [
              "pm.test(\"Ответ должен содержать код статуса 201 и данные в формате json\", function () {\r",
              "    pm.response.to.have.status(201);  \r",
              "    pm.response.to.be.withBody;\r",
              "    pm.response.to.be.json;\r",
              "});\r",
              "\r",
              "const source = JSON.parse(pm.request.body.raw);\r",
              "const target = pm.response.json();\r",
              "\r",
              "pm.test(\"Событие должно содержать поля: id, title, annotation, category, paid, eventDate, initiator, description, participantLimit, state, createdOn, location, requestModeration\", function () {\r",
              "pm.expect(target).to.have.property('id');\r",
              "pm.expect(target).to.have.property('title');\r",
              "pm.expect(target).to.have.property('annotation');\r",
              "pm.expect(target).to.have.property('category');\r",
              "pm.expect(target).to.have.property('paid');\r",
              "pm.expect(target).to.have.property('eventDate');\r",
              "pm.expect(target).to.have.property('initiator');\r",
              "pm.expect(target).to.have.property('description');\r",
              "pm.expect(target).to.have.property('participantLimit');\r",
              "pm.expect(target).to.have.property('state');\r",
              "pm.expect(target).to.have.property('createdOn');\r",
              "pm.expect(target).to.have.property('location');\r",
              "pm.expect(target).to.have.property('requestModeration');\r",
              "});\r",
              "\r",
              "pm.test(\"Данные в ответе должны соответствовать данным в запросе\", function () {\r",
              "    pm.expect(target.id).to.not.be.null;\r",
              "    pm.expect(target.title).equal(source.title, 'Название события должно соответствовать названию события в запросе');\r",
              "    pm.expect(target.annotation).equal(source.annotation, 'Аннотация события должна соответствовать аннотации события в запросе');\r",
              "    pm.expect(target.paid.toString()).equal(source.paid.toString(), 'Стоимость события должна соответствовать стоимости события в запросе');\r",
              "    pm.expect(target.eventDate).equal(source.eventDate, 'Дата проведения события должна соответствовать дате проведения события в запросе');\r",
              "    pm.expect(target.description).equal(source.description, 'Описание события должно соответствовать описание события в запросе');\r",
              "    pm.expect(target.participantLimit.toString()).equal(source.participantLimit.toString(), 'Лимит участников события должно соответствовать лимиту участников события в запросе');\r",
              "    pm.expect(target.location.lat.toString()).equal(source.location.lat.toString(), 'Широта локации проведения события должна соответствовать широте локации проведения события в запросе');\r",
              "    pm.expect(target.location.lon.toString()).equal(source.location.lon.toString(), 'Долгота локации проведения события должна соответствовать долготе локации проведения события в запросе');\r",
              "    pm.expect(target.requestModeration.toString()).equal(source.requestModeration.toString(), 'Необходимость модерации события должна соответствовать необходимости модерации события в запросе');\r",
              "});"
            ],
            "type": "text/javascript"
          }
        }
      ],
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Accept",
            "value": "application/json",
            "type": "text"
          }
        ],
        "body": {
          "mode": "raw",
          "raw": "{\r\n    \"annotation\": \"invite famous people on TV show\",\r\n    \"category\": \"1\",\r\n    \"description\": \"famous people tell about their films, songs, plays\",\r\n    \"eventDate\": \"2023-12-03 00:57:14\",\r\n    \"location\": {\r\n        \"lat\": \"-19.6556\",\r\n        \"lon\": \"-74.2121\"\r\n    },\r\n    \"paid\": false,\r\n    \"participantLimit\": 0,\r\n    \"requestModeration\": true,\r\n    \"title\": \"Late night show\"\r\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        },
        "url": {
          "raw": "http://localhost:8080/users/:userId/events",
          "protocol": "http",
          "host": [
            "localhost"
          ],
          "port": "8080",
          "path": [
            "users",
            ":userId",
            "events"
          ],
          "variable": [
            {
              "key": "userId",
              "value": "1",
              "description": "(Required) id текущего пользователя"
            }
          ]
        }
      },
      "response": []
    },
    {
      "name": "Add comment1 by user1",
      "event": [
        {
          "listen": "test",
          "script": {
            "exec": [
              "pm.test(\"Ответ должен содержать код статуса 201 и данные в формате json\", function () {\r",
              "    pm.response.to.have.status(201);\r",
              "    pm.response.to.be.withBody;\r",
              "    pm.response.to.be.json;\r",
              "});\r",
              "\r",
              "const source = JSON.parse(pm.request.body.raw);\r",
              "const target = pm.response.json();\r",
              "\r",
              "pm.test(\"Категория должна содержать поля: id, created, event, commentator, commentText\", function () {\r",
              "pm.expect(target).to.have.property('id');\r",
              "pm.expect(target).to.have.property('created');\r",
              "pm.expect(target).to.have.property('event');\r",
              "pm.expect(target).to.have.property('commentator');\r",
              "pm.expect(target).to.have.property('commentText');\r",
              "});\r",
              "\r",
              "pm.test(\"Данные в ответе должны соответствовать данным в запросе\", function () {\r",
              "    pm.expect(target.id).to.not.be.null;\r",
              "    pm.expect(source.commentText).equal(target.commentText, 'Комментарий должен совпадать с отправленным');\r",
              "});"
            ],
            "type": "text/javascript"
          }
        }
      ],
      "request": {
        "method": "POST",
        "header": [],
        "body": {
          "mode": "raw",
          "raw": "{\r\n    \"commentText\" : \"nice show!\"\r\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        },
        "url": {
          "raw": "http://localhost:8080/users/:userId/comments?eventId=1",
          "protocol": "http",
          "host": [
            "localhost"
          ],
          "port": "8080",
          "path": [
            "users",
            ":userId",
            "comments"
          ],
          "query": [
            {
              "key": "eventId",
              "value": "1",
              "description": "eventId"
            }
          ],
          "variable": [
            {
              "key": "userId",
              "value": "1"
            }
          ]
        }
      },
      "response": []
    },
    {
      "name": "404 Add comment to event2",
      "event": [
        {
          "listen": "test",
          "script": {
            "exec": [
              "pm.test(\"Ответ должен содержать код статуса 404 и данные в формате json\", function () {\r",
              "    pm.response.to.have.status(404);\r",
              "    pm.response.to.be.withBody;\r",
              "    pm.response.to.be.json;\r",
              "});"
            ],
            "type": "text/javascript"
          }
        }
      ],
      "request": {
        "method": "POST",
        "header": [],
        "body": {
          "mode": "raw",
          "raw": "{\r\n    \"commentText\" : \"nice show!\"\r\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        },
        "url": {
          "raw": "http://localhost:8080/users/:userId/comments?eventId=999",
          "protocol": "http",
          "host": [
            "localhost"
          ],
          "port": "8080",
          "path": [
            "users",
            ":userId",
            "comments"
          ],
          "query": [
            {
              "key": "eventId",
              "value": "999",
              "description": "eventId"
            }
          ],
          "variable": [
            {
              "key": "userId",
              "value": "1"
            }
          ]
        }
      },
      "response": []
    },
    {
      "name": "Add comment2 by user2",
      "event": [
        {
          "listen": "test",
          "script": {
            "exec": [
              "pm.test(\"Ответ должен содержать код статуса 201 и данные в формате json\", function () {\r",
              "    pm.response.to.have.status(201);\r",
              "    pm.response.to.be.withBody;\r",
              "    pm.response.to.be.json;\r",
              "});\r",
              "\r",
              "const source = JSON.parse(pm.request.body.raw);\r",
              "const target = pm.response.json();\r",
              "\r",
              "pm.test(\"Категория должна содержать поля: id, created, event, commentator, commentText\", function () {\r",
              "pm.expect(target).to.have.property('id');\r",
              "pm.expect(target).to.have.property('created');\r",
              "pm.expect(target).to.have.property('event');\r",
              "pm.expect(target).to.have.property('commentator');\r",
              "pm.expect(target).to.have.property('commentText');\r",
              "});\r",
              "\r",
              "pm.test(\"Данные в ответе должны соответствовать данным в запросе\", function () {\r",
              "    pm.expect(target.id).to.not.be.null;\r",
              "    pm.expect(source.commentText).equal(target.commentText, 'Комментарий должен совпадать с отправленным');\r",
              "});"
            ],
            "type": "text/javascript"
          }
        }
      ],
      "request": {
        "method": "POST",
        "header": [],
        "body": {
          "mode": "raw",
          "raw": "{\r\n    \"commentText\" : \"I agree with user1\"\r\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        },
        "url": {
          "raw": "http://localhost:8080/users/:userId/comments?eventId=1",
          "protocol": "http",
          "host": [
            "localhost"
          ],
          "port": "8080",
          "path": [
            "users",
            ":userId",
            "comments"
          ],
          "query": [
            {
              "key": "eventId",
              "value": "1",
              "description": "eventId"
            }
          ],
          "variable": [
            {
              "key": "userId",
              "value": "2"
            }
          ]
        }
      },
      "response": []
    },
    {
      "name": "Receive all comments for event1",
      "event": [
        {
          "listen": "test",
          "script": {
            "exec": [
              "pm.test(\"Ответ должен содержать код статуса 200 и данные в формате json\", function () {\r",
              "    pm.response.to.be.ok;    \r",
              "    pm.response.to.be.withBody;\r",
              "    pm.response.to.be.json;\r",
              "});\r",
              "\r",
              "const target = pm.response.json()[0];\r",
              "\r",
              "pm.test(\"Комментарий должен содержать поля: id, created, event, commentator, commentText\", function () {\r",
              "    pm.expect(target).to.contain.keys('id', 'created', 'event', 'commentator', 'commentText');\r",
              "});"
            ],
            "type": "text/javascript"
          }
        }
      ],
      "request": {
        "method": "GET",
        "header": [],
        "url": {
          "raw": "http://localhost:8080/events/:id/comments",
          "protocol": "http",
          "host": [
            "localhost"
          ],
          "port": "8080",
          "path": [
            "events",
            ":id",
            "comments"
          ],
          "variable": [
            {
              "key": "id",
              "value": "1",
              "description": "id события"
            }
          ]
        }
      },
      "response": []
    },
    {
      "name": "Change comment1 by user1",
      "event": [
        {
          "listen": "test",
          "script": {
            "exec": [
              "pm.test(\"Ответ должен содержать код статуса 200 и данные в формате json\", function () {\r",
              "    pm.response.to.have.status(200);\r",
              "    pm.response.to.be.withBody;\r",
              "    pm.response.to.be.json;\r",
              "});\r",
              "\r",
              "const source = JSON.parse(pm.request.body.raw);\r",
              "const target = pm.response.json();\r",
              "\r",
              "pm.test(\"Категория должна содержать поля: id, created, event, commentator, commentText\", function () {\r",
              "pm.expect(target).to.have.property('id');\r",
              "pm.expect(target).to.have.property('created');\r",
              "pm.expect(target).to.have.property('event');\r",
              "pm.expect(target).to.have.property('commentator');\r",
              "pm.expect(target).to.have.property('commentText');\r",
              "});\r",
              "\r",
              "pm.test(\"Данные в ответе должны соответствовать данным в запросе\", function () {\r",
              "    pm.expect(target.id).to.not.be.null;\r",
              "    pm.expect(source.commentText).equal(target.commentText, 'Комментарий должен совпадать с отправленным');\r",
              "});"
            ],
            "type": "text/javascript"
          }
        }
      ],
      "request": {
        "method": "PATCH",
        "header": [],
        "body": {
          "mode": "raw",
          "raw": "{\r\n    \"commentText\" : \"The best show i've ever seen!\"\r\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        },
        "url": {
          "raw": "http://localhost:8080/users/:userId/comments/:commentId",
          "protocol": "http",
          "host": [
            "localhost"
          ],
          "port": "8080",
          "path": [
            "users",
            ":userId",
            "comments",
            ":commentId"
          ],
          "variable": [
            {
              "key": "userId",
              "value": "1"
            },
            {
              "key": "commentId",
              "value": "1"
            }
          ]
        }
      },
      "response": []
    },
    {
      "name": "400 Change comment2 by user1 (not author)",
      "event": [
        {
          "listen": "test",
          "script": {
            "exec": [
              "pm.test(\"Ответ должен содержать код статуса 400 и данные в формате json\", function () {\r",
              "    pm.response.to.have.status(400);\r",
              "    pm.response.to.be.withBody;\r",
              "    pm.response.to.be.json;\r",
              "});"
            ],
            "type": "text/javascript"
          }
        }
      ],
      "request": {
        "method": "PATCH",
        "header": [],
        "body": {
          "mode": "raw",
          "raw": "{\r\n    \"commentText\" : \"The best show i've ever seen!\"\r\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        },
        "url": {
          "raw": "http://localhost:8080/users/:userId/comments/:commentId",
          "protocol": "http",
          "host": [
            "localhost"
          ],
          "port": "8080",
          "path": [
            "users",
            ":userId",
            "comments",
            ":commentId"
          ],
          "variable": [
            {
              "key": "userId",
              "value": "1"
            },
            {
              "key": "commentId",
              "value": "2"
            }
          ]
        }
      },
      "response": []
    },
    {
      "name": "400 Delete comment1 by user2 (not author)",
      "event": [
        {
          "listen": "test",
          "script": {
            "exec": [
              "pm.test(\"Ответ должен содержать код статуса 400 и данные в формате json\", function () {\r",
              "    pm.response.to.have.status(400);\r",
              "    pm.response.to.be.withBody;\r",
              "    pm.response.to.be.json;\r",
              "});"
            ],
            "type": "text/javascript"
          }
        }
      ],
      "request": {
        "method": "DELETE",
        "header": [],
        "url": {
          "raw": "http://localhost:8080/users/:userId/comments/:commentId",
          "protocol": "http",
          "host": [
            "localhost"
          ],
          "port": "8080",
          "path": [
            "users",
            ":userId",
            "comments",
            ":commentId"
          ],
          "variable": [
            {
              "key": "userId",
              "value": "2"
            },
            {
              "key": "commentId",
              "value": "1"
            }
          ]
        }
      },
      "response": []
    },
    {
      "name": "Delete comment1 by user1",
      "event": [
        {
          "listen": "test",
          "script": {
            "exec": [
              "pm.test(\"Ответ должен содержать код статуса 204\", function () {\r",
              "    pm.response.to.have.status(204);\r",
              "});"
            ],
            "type": "text/javascript"
          }
        }
      ],
      "request": {
        "method": "DELETE",
        "header": [],
        "url": {
          "raw": "http://localhost:8080/users/:userId/comments/:commentId",
          "protocol": "http",
          "host": [
            "localhost"
          ],
          "port": "8080",
          "path": [
            "users",
            ":userId",
            "comments",
            ":commentId"
          ],
          "variable": [
            {
              "key": "userId",
              "value": "1"
            },
            {
              "key": "commentId",
              "value": "1"
            }
          ]
        }
      },
      "response": []
    },
    {
      "name": "404 Delete comment1 by admin (comment not exist)",
      "event": [
        {
          "listen": "test",
          "script": {
            "exec": [
              "pm.test(\"Ответ должен содержать код статуса 404 и данные в формате json\", function () {\r",
              "    pm.response.to.have.status(404);\r",
              "    pm.response.to.be.withBody;\r",
              "    pm.response.to.be.json;\r",
              "});"
            ],
            "type": "text/javascript"
          }
        }
      ],
      "request": {
        "method": "DELETE",
        "header": [],
        "url": {
          "raw": "http://localhost:8080/admin/events/:commentId",
          "protocol": "http",
          "host": [
            "localhost"
          ],
          "port": "8080",
          "path": [
            "admin",
            "events",
            ":commentId"
          ],
          "variable": [
            {
              "key": "commentId",
              "value": "1"
            }
          ]
        }
      },
      "response": []
    },
    {
      "name": "Delete comment2 by admin",
      "event": [
        {
          "listen": "test",
          "script": {
            "exec": [
              "pm.test(\"Ответ должен содержать код статуса 204\", function () {\r",
              "    pm.response.to.have.status(204);\r",
              "});"
            ],
            "type": "text/javascript"
          }
        }
      ],
      "request": {
        "method": "DELETE",
        "header": [],
        "url": {
          "raw": "http://localhost:8080/admin/events/:commentId",
          "protocol": "http",
          "host": [
            "localhost"
          ],
          "port": "8080",
          "path": [
            "admin",
            "events",
            ":commentId"
          ],
          "variable": [
            {
              "key": "commentId",
              "value": "2"
            }
          ]
        }
      },
      "response": []
    }
  ]
}